package com.example.springboot.controller;

import com.example.springboot.entity.Story;
import com.example.springboot.model.ApiResponse;
import com.example.springboot.service.StoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 故事控制器
 * 提供故事相关的API接口
 */
@RestController
@RequestMapping("/api/story")
@CrossOrigin(origins = "*", maxAge = 3600)
public class StoryController {

    /**
     * 注入故事服务
     */
    @Autowired
    private StoryService storyService;

    /**
     * 根据故事ID获取故事详情
     *
     * @param storyId 故事ID
     * @return API响应，包含故事数据
     */
    @GetMapping("/{storyId}")
    public ApiResponse getStoryById(@PathVariable String storyId) {
        Story story = storyService.getStoryById(storyId);
        if (story != null) {
            return ApiResponse.success("获取成功", story);
        } else {
            return ApiResponse.error("故事不存在");
        }
    }

    /**
     * 根据用户ID获取该用户的个人故事（个人故事Tab专用）
     *
     * @param userId 用户ID
     * @return API响应，包含该用户的个人故事列表
     */
    @GetMapping("/user/{userId}")
    public ApiResponse getPersonalStories(@PathVariable Integer userId) {
        List<Story> stories = storyService.getStoriesByUserId(userId);
        return ApiResponse.success("成功", stories);
    }

    /**
     * 保存故事（新增或更新）
     *
     * @param story 故事对象
     * @return API响应，包含保存后的故事
     */
    @PostMapping("/save")
    public ApiResponse saveStory(@RequestBody Story story) {
        try {
            Story savedStory = storyService.saveStory(story);
            return ApiResponse.success("保存成功", savedStory);
        } catch (Exception e) {
            return ApiResponse.error("保存故事失败: " + e.getMessage());
        }
    }

    /**
     * 根据故事ID删除故事
     *
     * @param storyId 故事ID
     * @return API响应，包含删除结果
     */
    @DeleteMapping("/{storyId}")
    public ApiResponse deleteStory(@PathVariable String storyId) {
        boolean result = storyService.deleteStory(storyId);
        if (result) {
            return ApiResponse.success("删除成功");
        } else {
            return ApiResponse.error("删除失败，故事可能不存在");
        }
    }

    /**
     * 获取所有可分享的故事
     *
     * @return API响应，包含可分享的故事列表
     */
    @GetMapping("/sharable")
    public ApiResponse getSharableStories() {
        List<Story> stories = storyService.getSharableStories();
        return ApiResponse.success("成功", stories);
    }

    /**
     * 根据故事分类获取故事
     *
     * @param classification 故事分类
     * @return API响应，包含故事列表
     */
    @GetMapping("/classification/{classification}")
    public ApiResponse getStoriesByClassification(@PathVariable Integer classification) {
        List<Story> stories = storyService.getStoriesByClassification(classification);
        return ApiResponse.success("成功", stories);
    }

    /**
     * 根据标签搜索故事
     *
     * @param tag 标签关键词
     * @return API响应，包含匹配的故事列表
     */
    @GetMapping("/search")
    public ApiResponse searchStoriesByTag(@RequestParam String tag) {
        List<Story> stories = storyService.searchStoriesByTag(tag);
        return ApiResponse.success("成功", stories);
    }
}